﻿using System.Collections.Generic;
using Sebrae.Academico.InfraEstrutura.Core;
using Sebrae.Academico.InfraEstrutura.Core.UnitOfWork;
using Sebrae.Academico.Trilhas.Dominio.Classes;
using NHibernate.Linq;
using NHibernate;
using System.Linq;

namespace Sebrae.Academico.Trilhas.BM.Classes
{
    public class BMItemTrilha : BusinessManagerBase
    {
        private RepositorioBase<ItemTrilha> repositorio = null;

        public BMItemTrilha(IUnitOfWork unitOfWork)
        {
            repositorio = new RepositorioBase<ItemTrilha>(unitOfWork);
        }

        public void Incluir(ItemTrilha pItemTrilha)
        {
            repositorio.Salvar(pItemTrilha);
        }

        public void Alterar(ItemTrilha pItemTrilha)
        {
            repositorio.Salvar(pItemTrilha);
        }

        public IList<ItemTrilha> ObterTodos()
        {
            return repositorio.ObterTodos();
        }

        public ItemTrilha ObterPorID(int pId)
        {
            return repositorio.ObterPorID(pId);
        }

        public void Excluir(ItemTrilha pItemTrilha)
        {
            repositorio.Excluir(pItemTrilha);
        }

        public IList<ItemTrilha> ObterPorFiltro(ItemTrilha itemTrilha)
        {
            var query = repositorio.Session.Query<ItemTrilha>();
            
            if (itemTrilha.TrilhaNivel != null)
                query = query.Where(x => x.TrilhaNivel.ID == itemTrilha.TrilhaNivel.ID);

            if (itemTrilha.Trilha != null)
                query = query.Where(x => x.Trilha.ID == itemTrilha.Trilha.ID);
            
            if (itemTrilha.SolucaoEducacional != null)
                query = query.Where(x => x.SolucaoEducacional.ID == itemTrilha.SolucaoEducacional.ID);

            if (itemTrilha.TrilhaFormaAprendizagem != null)
                query = query.Where(x => x.TrilhaFormaAprendizagem.ID == itemTrilha.TrilhaFormaAprendizagem.ID);

            if (itemTrilha.TrilhaTopicoTematico != null)
                query = query.Where(x => x.TrilhaTopicoTematico.ID == itemTrilha.TrilhaTopicoTematico.ID);
            
            return query.ToList<ItemTrilha>();

        }

        protected override bool ValidarDependencias(object pItemTrilha)
        {
            return true;
        }
    }
}
